/*
 * Copyright (c) 2010 Mathew Hall, University of Sheffield.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or
 * without modification, are permitted provided that the following conditions
 * are met:
 *
 * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided
 * with the distribution.
 *
 * Neither the name of the University of Sheffield nor the names of its
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
package primitives.util;



import primitives.cluster.IClusterLevel;



public class UndefinedIndexException extends Exception {

	

	/**
	 * 
	 */

	private static final long serialVersionUID = 1L;

	private IClusterLevel defaultTree;



	/**
	 * Throw a new exception signalling a node or (more likely) cluster was not found
	 * in a cluster tree.  This is likely due to merges.  Although it signifies an error
	 * it will still return a (pretty much random) cluster node so execution can continue
	 * even if this exception is raised. Behaviour past that is undefined however as the
	 * node returned will be of no significance in relation to the ID number searched for.
	 * TODO: possible fixes include reindexing (breaks xover) and merging all ids of merged
	 * nodes so each cluster stores all the IDs it may have been known by.
	 * @param arg a message that will be passes to the @see Exception constructor
	 * @param def the default element.
	 */

	public UndefinedIndexException(String arg,IClusterLevel def){

		super(arg);

		defaultTree = def;

	}

	

	public IClusterLevel getDefaultNode(){

		return defaultTree;

	}

	

}

